home *** CD-ROM | disk | FTP | other *** search
/ Delphi 5 for Professionals / DELPHI5.iso / AddOns / Components / Cell Control / DATA1.CAB / VCDEMO_Files / UserFuncDlg.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1998-01-11  |  6.0 KB  |  205 lines

  1. // UserFuncDlg.cpp : implementation file
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include "VCDemo.h"
  6. #include "UserFuncDlg.h"
  7. #include "funcguidedlg.h"
  8.  
  9. #ifdef _DEBUG
  10. #define new DEBUG_NEW
  11. #undef THIS_FILE
  12. static char THIS_FILE[] = __FILE__;
  13. #endif
  14.  
  15. #include <afxpriv.h>
  16.  
  17. /////////////////////////////////////////////////////////////////////////////
  18. // CUserFuncDlg dialog
  19.  
  20.  
  21. CUserFuncDlg::CUserFuncDlg(CWnd* pParent /*=NULL*/)
  22.     : CDialog(CUserFuncDlg::IDD, pParent)
  23. {
  24.     //{{AFX_DATA_INIT(CUserFuncDlg)
  25.         // NOTE: the ClassWizard will add member initialization here
  26.     //}}AFX_DATA_INIT
  27. }
  28.  
  29.  
  30. void CUserFuncDlg::DoDataExchange(CDataExchange* pDX)
  31. {
  32.     CDialog::DoDataExchange(pDX);
  33.     //{{AFX_DATA_MAP(CUserFuncDlg)
  34.     DDX_Control(pDX, IDC_SGCTRL1, m_ctrl);
  35.     //}}AFX_DATA_MAP
  36. }
  37.  
  38.  
  39. BEGIN_MESSAGE_MAP(CUserFuncDlg, CDialog)
  40.     //{{AFX_MSG_MAP(CUserFuncDlg)
  41.     //}}AFX_MSG_MAP
  42. END_MESSAGE_MAP()
  43.  
  44. /////////////////////////////////////////////////////////////////////////////
  45. // CUserFuncDlg message handlers
  46.  
  47. BOOL CUserFuncDlg::OnInitDialog() 
  48. {
  49.     CDialog::OnInitDialog();
  50.     
  51.     // TODO: Add extra initialization here
  52.     m_ctrl.SetCols( 8 );
  53.     m_ctrl.SetCols( 38 );
  54.  
  55.     short type[4];
  56.     short defaultpara[4];
  57.  
  58.     type[0] = 0;            //float number( double )
  59.     type[1] = 1;            //string
  60.     type[2] = 2;             //cell
  61.     type[3] = 3;             //area
  62.  
  63.     //the second parameter can't be absebt
  64.     defaultpara[0] = 1;          
  65.     defaultpara[1] = 0;
  66.     defaultpara[2] = 1;
  67.     defaultpara[3] = 1;
  68.  
  69.     char funchelp1[] = "MyFunc1( p1, p2, p3, p4 )\r\n"
  70.                                         " p1 -- number, such as 5.6\r\n"
  71.                                         " p2 -- string, such as \"asdf\"\r\n"
  72.                                         " p3 -- cell, such as c3\r\n"
  73.                                         " p4 -- area, such as a1:c3\r\n\r\n"
  74.                                         " return a number";
  75.     char funchelp2[] = "MyFunc2( [p1], p2, [p3], [p4] )\r\n"
  76.                                         " p1 -- number, such as 5.6\r\n"
  77.                                         " p2 -- string, such as \"asdf\"\r\n"
  78.                                         " p3 -- cell, such as c3\r\n"
  79.                                         " p4 -- area, such as a1:c3\r\n\r\n"
  80.                                         " return a string";
  81.  
  82.     if( !m_ctrl.DoAddUserFunction( "User function", "MyFunc1", 0, 4, type, funchelp1 ) )
  83.         AfxMessageBox( "Failed" );
  84.     if( !m_ctrl.DoAddUserFunctionEx( "User function", "MyFunc2", 1, 4, type, defaultpara, funchelp2 ) )
  85.         AfxMessageBox( "Failed" );
  86.  
  87.     m_ctrl.DoSetFormula( 1, 1, "cos(sin( myfunc1( 12, \"welcome\", a1, a1:a3 )))" );
  88.     m_ctrl.DoSetFormula( 1, 2, "myfunc2( , \"welcome\" )+\" how are you\"" );
  89.  
  90.     m_ctrl.SetPageLabelVisible( FALSE );
  91.     COleVariant var( "VCDEMO" );
  92.     m_ctrl.DoSetMessageTitle( var );
  93.     return TRUE;  // return TRUE unless you set the focus to a control
  94.                   // EXCEPTION: OCX Property Pages should return FALSE
  95. }
  96.  
  97. BEGIN_EVENTSINK_MAP(CUserFuncDlg, CDialog)
  98.     //{{AFX_EVENTSINK_MAP(CUserFuncDlg)
  99.     ON_EVENT(CUserFuncDlg, IDC_SGCTRL1, 29 /* OnExecuteUserFunc */, OnOnExecuteUserFuncSgctrl1, VTS_BSTR VTS_I2 VTS_I2 VTS_PI4 VTS_PVARIANT)
  100.     ON_EVENT(CUserFuncDlg, IDC_SGCTRL1, 50 /* OnUserFuncGuide */, OnOnUserFuncGuideSgctrl1, VTS_I4 VTS_BSTR VTS_PVARIANT)
  101.     //}}AFX_EVENTSINK_MAP
  102. END_EVENTSINK_MAP()
  103.  
  104. void CUserFuncDlg::OnOnExecuteUserFuncSgctrl1(LPCTSTR name, short rettype, short paranum, long FAR* paratype, VARIANT FAR* funcResult) 
  105. {
  106.     // TODO: Add your control notification handler code here
  107.     USES_CONVERSION;      //add #include <afxpriv.h> in your stdafx.h
  108.  
  109.     COleVariant  v1;
  110.     char buffer[40];
  111.  
  112.         CString tmp( "parameter1: numeric " );
  113.     m_ctrl.DoFetchFuncParameter( 0, &v1);
  114.     if( v1.vt == VT_R8 )                                                //check var type you can know it's absent or not
  115.             sprintf( buffer, "%f", v1.dblVal);
  116.     else if( v1.vt == 0 )
  117.             sprintf( buffer, "%s", "  parameter absent" );
  118.     tmp += CString(buffer);
  119.  
  120.     tmp += "\nparameter2: string  ";
  121.     m_ctrl.DoFetchFuncParameter( 1, &v1);
  122.     if( v1.vt == VT_BSTR )
  123.         tmp += W2A(V_BSTR(&v1));
  124.     else if( v1.vt == 0 ){
  125.             sprintf( buffer, "%s", "  parameter absent" );
  126.             tmp += buffer;
  127.     }
  128.  
  129.     tmp += "\nparameter3: cell  ";
  130.     m_ctrl.DoFetchFuncParameter( 2, &v1);
  131.     if( v1.vt == VT_I4 ){
  132.         sprintf( buffer, "%d", v1.lVal);
  133.         tmp += CString("    row ")+buffer;
  134.         m_ctrl.DoFetchFuncParameter( 3, &v1);
  135.         if( v1.vt == VT_I4 ){
  136.             sprintf( buffer, "%d", v1.lVal);
  137.             tmp += CString("   col ") + CString( buffer );
  138.         }
  139.     }
  140.     else if( v1.vt == 0 ){
  141.             sprintf( buffer, "%s", "  parameter absent" );
  142.             tmp += buffer;
  143.     }
  144.  
  145.     tmp += "\nparameter4: range  ";
  146.     m_ctrl.DoFetchFuncParameter( 4, &v1);
  147.     if( v1.vt == VT_I4 ){
  148.         sprintf( buffer, "%d", v1.lVal);
  149.         tmp += CString("    row ")+buffer;
  150.         m_ctrl.DoFetchFuncParameter( 5, &v1);
  151.         if( v1.vt == VT_I4 )
  152.                 sprintf( buffer, "%d", v1.lVal);
  153.         tmp += CString("   col ")+buffer;
  154.         m_ctrl.DoFetchFuncParameter( 6, &v1);
  155.         if( v1.vt == VT_I4 )
  156.                 sprintf( buffer, "%d", v1.lVal);
  157.         tmp += CString("    row ")+buffer;
  158.         m_ctrl.DoFetchFuncParameter( 7, &v1);
  159.         if( v1.vt == VT_I4 )
  160.                 sprintf( buffer, "%d", v1.lVal);
  161.         tmp += CString("   col ")+buffer;
  162.     }
  163.     else if( v1.vt == 0 ){
  164.             sprintf( buffer, "%s", "  parameter absent" );
  165.             tmp += buffer;
  166.     }
  167.  
  168.     v1.Clear();
  169.     if( stricmp( name, "MyFunc1" ) == 0 ){
  170.         v1 = 54.35;
  171.             tmp +=  CString("\nreturn: 54.35 ");
  172.     }
  173.     else if( stricmp( name, "MyFunc2" ) == 0 ){
  174.         v1 = "hello!";                                                 //changed here!!
  175.             tmp +=  CString("\nreturn: hello ");
  176.     }
  177.     AfxMessageBox( tmp );
  178.     *funcResult = v1.Detach();
  179.     
  180. }
  181.  
  182. void CUserFuncDlg::OnOnUserFuncGuideSgctrl1(long parent, LPCTSTR funcname, VARIANT FAR* guidestring) 
  183. {
  184.     // TODO: Add your control notification handler code here
  185.     if( stricmp( funcname, "myfunc1" ) == 0 ){
  186.         CWnd* pwnd = CWnd::FromHandle( HWND( parent ) );
  187.         CFuncGuideDlg dlg( pwnd );
  188.         if( dlg.DoModal() == IDOK ){
  189.             COleVariant  var;
  190.             CString result;
  191.             result = "MyFunc1( ";
  192.             result += dlg.m_para1;
  193.             result += ", \"";
  194.             result += dlg.m_para2;
  195.             result += "\", ";
  196.             result += dlg.m_para3;
  197.             result += ", ";
  198.             result += dlg.m_para4;
  199.             result += " )";
  200.             var = result;
  201.             *guidestring = var.Detach();
  202.         }
  203.     }
  204. }
  205.